package com.cencat.user.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户角色关联视图对象
 * @author cencat
 * @since 2024-01-01
 */
@Data
@Schema(description = "用户角色关联视图对象")
public class UserRoleVO {

    /**
     * 用户ID
     */
    @Schema(description = "用户ID", example = "1")
    private Long userId;

    /**
     * 用户名
     */
    @Schema(description = "用户名", example = "admin")
    private String username;

    /**
     * 用户昵称
     */
    @Schema(description = "用户昵称", example = "管理员")
    private String nickname;

    /**
     * 用户邮箱
     */
    @Schema(description = "用户邮箱", example = "admin@example.com")
    private String email;

    /**
     * 用户手机号
     */
    @Schema(description = "用户手机号", example = "13800138000")
    private String phone;

    /**
     * 用户状态（1-正常，0-禁用）
     */
    @Schema(description = "用户状态（1-正常，0-禁用）", example = "1")
    private Integer userStatus;

    /**
     * 角色列表
     */
    @Schema(description = "角色列表")
    private List<RoleInfo> roles;

    /**
     * 租户ID
     */
    @Schema(description = "租户ID", example = "1")
    private Long tenantId;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间", example = "2024-01-01 12:00:00")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间", example = "2024-01-01 12:00:00")
    private LocalDateTime updateTime;

    /**
     * 角色信息内部类
     */
    @Data
    @Schema(description = "角色信息")
    public static class RoleInfo {

        /**
         * 角色ID
         */
        @Schema(description = "角色ID", example = "1")
        private Long roleId;

        /**
         * 角色名称
         */
        @Schema(description = "角色名称", example = "管理员")
        private String roleName;

        /**
         * 角色编码
         */
        @Schema(description = "角色编码", example = "ADMIN")
        private String roleCode;

        /**
         * 角色类型（1-系统角色，2-业务角色，3-自定义角色）
         */
        @Schema(description = "角色类型（1-系统角色，2-业务角色，3-自定义角色）", example = "1")
        private Integer roleType;

        /**
         * 角色状态（1-正常，0-禁用）
         */
        @Schema(description = "角色状态（1-正常，0-禁用）", example = "1")
        private Integer roleStatus;

        /**
         * 数据范围（1-全部数据权限，2-自定数据权限，3-本部门数据权限，4-本部门及以下数据权限，5-仅本人数据权限）
         */
        @Schema(description = "数据范围（1-全部数据权限，2-自定数据权限，3-本部门数据权限，4-本部门及以下数据权限，5-仅本人数据权限）", example = "1")
        private Integer dataScope;

        /**
         * 角色描述
         */
        @Schema(description = "角色描述", example = "系统管理员角色")
        private String description;

        /**
         * 分配时间
         */
        @Schema(description = "分配时间", example = "2024-01-01 12:00:00")
        private LocalDateTime assignTime;
    }
}